package com.gosophia.conferenceManagement.confPreparation.ws;

import java.util.List;

import com.gosophia.commons.exception.BusinessException;
import com.gosophia.conferenceManagement.common.dto.DocumentDTO;
import com.gosophia.conferenceManagement.common.entity.Document;
import com.gosophia.conferenceManagement.common.ws.ConferenceHandleWebService;
import com.gosophia.conferenceManagement.confPreparation.dto.ParticipatingNameListDTO;
import com.gosophia.userManagement.dto.UserInfoDTO;

/**
 * 会务管理webService
 * @author wangxinbing
 * @since  2011-3-22
 *  Copyright (c) 2010 Gosophia corporation All Rights Reserved
 */
public interface ConfPreparationWebService {
    /**
     * 通过会务管理jobId查询会议议程
     * @param jobId 会务管理jobId不能为null
     * @return 返回会议议程文档实体
     */
    public DocumentDTO findAgendaByJobId(Long jobId) throws BusinessException;
    /**
     * 通过会务管理jobId查询会议材料
     * @param jobId 会务管理jobId不能为null
     * @return 返回会议材料列表
     */
    public List<DocumentDTO> findMaterialsByJobId(Long jobId) throws BusinessException;
    
    /**
     * 通过会务管理jobId查询会议签到表
     * @param jobId 会务管理jobId不能为null
     * @return 返回会议签到表
     * @throws BusinessException
     */
    public DocumentDTO findSignTableByJodId(Long jobId) throws BusinessException;
    
    /**
     * 发送正式通知时，找到对应的会务管理Job 调用此方法添加反馈通知单，初始反馈状态为ifAttend = 
     *    NotificationFeedbackList.IfAttend.IfAttend.IFATTEND_NONE
     * @param jobId 会务管理JobId
     * @param userList 发送给的用户列表
     * @throws BusinessException
     */
	public void addNotificationFeedbackList(Long jobId, List<UserInfoDTO> userList) throws BusinessException;
	/**
	 * 用户反馈时调用此方法更新反馈状态 ：参会ifAttend= NotificationFeedbackList.IfAttend.IfAttend.IFATTEND_YES
	 * 不参会ifAttend= NotificationFeedbackList.IfAttend.IfAttend.IFATTEND_NO
	 * @param jobId 会务管理JobId
	 * @param userId 反馈的用户ID
	 * @param ifAttend 是否出席
	 * @throws BusinessException
	 */
	public void updateNotificationFeedbackList(Long jobId, Long userId,String ifAttend) throws BusinessException;
	/**
	 * 通过会务管理jobId查询出反馈通知单列表
	 * @param jobId 会务管理JobId
	 * @return 返回通知单列表
	 */
    public List<ParticipatingNameListDTO> findNotificationFeedbackListsByJobId(Long jobId);
    /**
     * 修改会务管理参会名单
     * @param jobId 会务管理JobId 不能为空
     * @param participatingNameLists 参会名单列表
     * @throws BusinessException
     */
    public void updateParticipatingNameList(Long jobId,List<ParticipatingNameListDTO> participatingNameLists) throws BusinessException;
	/**
	 * 通过会务管理jobId查询参会名单列表
	 * @param jobId 会务管理jobId 不能为空
	 * @return 参会名单列表
	 */
    public List<ParticipatingNameListDTO> findParticipatingNameListsByJobId(Long jobId);
    /**
     * 设置会议材料
     * @param jobId jobId不能为null
     * @param materials 会议材料
     * @throws BusinessException
     */
	public void updateConfMaterials(Long jobId, List<DocumentDTO> materials) throws BusinessException;
	/**
	 * 更新签到表
	 * @param jobId 不能为null
	 * @param docDTO
	 * @return Document
	 */
	public DocumentDTO updateConfSignTable(Long jobId, DocumentDTO docDTO) throws BusinessException;
	/**
	 * 更新会议议程
	 * @param jobId 不能为null
	 * @param docDTO
	 * @return Document
	 */
	public DocumentDTO updateAgenda(Long jobId, DocumentDTO docDTO) throws BusinessException;
	/**
	 * 完成会务准备
	 * @param jobId not null
	 * @parma operatorId not null
	 */
	public void accomplishConferencePrepare(Long jobId,Long operatorId,String confPrepareType) throws BusinessException;
	/**
	 * 判断是否已经反馈
	 * @param jobId 会务管理jobId 不能为null
	 * @param userInfoId 用户ID 不能为null
	 * @return 如果已经反馈返回true未反馈返回false
	 */
	public boolean ifFeedBacked(Long jobId, Long userInfoId);
	/**
	 * 根据公文Id删除该文件
	 * @param documentId 不能为null
	 * @param jobId 不能为null
	 */
	public void deleteConfPMetailBydocId(Long documentId,Long jobId) throws BusinessException;
}
